﻿#define  _CRT_SECURE_NO_WARNINGS 1

//1. 编程求解下列式子的值：S = 1 + 2 + 3 + ··· + n.
//输入
//输入一行，只有一个整数n(1 < n < 1000)
//	输出
//	输出只有一行（这意味着末尾有一个回车符号），包括1个整数。
//	样例
//	输入
//	100
//	输出
//	5050
#include <stdio.h>
//int main()
//{
//	int n = 0;//用于存储整数n
//	int sum = 0;//用于存储总和
//	printf("请输入一个整数n（1 < n <1000）: ");
//	scanf("%d", &n);//给变量n赋值
//	for (int i = 1; i <= n; i++)//每一次循环就有1项  n次循环 n项 第一次循环得到第一项1
//		//再求和即可
//	{
//		sum += i; //注意这是i  sum = sum + i
//	}printf("%d\n", sum);
//	return 0;
//}




//2. 编程求1 + 1 / 2 + 1 / 3 + ··· + 1 / n。
//输入
//输入一行，只有一个整数n(1 < n < 200)。
//输出
//输出只有一行 （这意味着末尾有一个回车符号），包括1个实数。（保留 3位小数）。
//样例
//输入
//5
//输出
//2.283
//int main()
//{
//	int n = 0;//存储这个整数
//	double sum = 0.0;//存储总和
//	printf("请输入一个整数n（ 1<n<200 ）: ");
//	scanf("%d", &n);
//	for (int i = 1; i <= n; i++)
//	{
//
//		  sum += 1.0 / i; //sum = sum + 1.0/i  细节1..0
//		
//	}
//	printf("%.3f\n", sum);
//	return 0;
//}

//3.请各位小伙伴完成他未完成的心愿小球从某一高度落下，每次落地后反跳回原来高度的一半，
//再落下。
//输入弹球的初始高度M和回弹次数N，输出弹球第N次回弹后的高度 和达到该高度后所经过的距离(保留两位小数)
//(0 < M < 2000, 0 < N < 50)
//样例输入
//1000 5
//样例输出
//31.25
//2906.25
int main()
{
	double M = 0.0; //用于存储初始高度
	int N = 0;//用于存储回弹次数
	double height = 0.0;//用于存储第N次回弹后的高度
	double current = 0.0;//存储经过的总距离
	printf("请输入弹球的初始高度M和回弹次数N（ 0 < M < 2000, 0 < N < 50）: ");
	scanf("%lf %d", &M, &N);  //double sacnf需要使用lf
	//第一次下落开始已经计算，所以从第二次开始回弹高度减半
	height = M;  //初始下落高度
	current = M;//当前高度
	for (int i = 1; i <=N; i++)
	{
		current /= 2.0; //弹起后高度变为一半
		height += current;  // 加上弹起的上升距离
			if (i < N)  //如果不是最后一次回弹
			{
				height += current;//加上下一次的下落距离（从当前高度到地面）

			}

	}
	printf("%.2f\n%.2f\n", current, height);


	return 0;
}